#include <iostream>

class DatabaseConnection {
public:
    static DatabaseConnection& getInstance() {
        static DatabaseConnection instance;			// 确保被销毁
        return instance;
    }

    // 拷贝构造函数和赋值运算符已禁用
    DatabaseConnection(const DatabaseConnection&) = delete;
    DatabaseConnection& operator=(const DatabaseConnection&) = delete;

    void connect() {
        // 模拟连接数据库
        std::cout << "Database connected." << std::endl;
    }

    void disconnect() {
        // 模拟断开数据库连接
        std::cout << "Database disconnected." << std::endl;
    }

private:
    DatabaseConnection() {}  					// 私有构造函数
    ~DatabaseConnection() {} 					// 私有析构函数
};
class DatabaseConnectionManager {
public:
    DatabaseConnectionManager() {
        // 获取单例并进行连接
        db = &DatabaseConnection::getInstance();
        db->connect();
    }

    ~DatabaseConnectionManager() {
        // 断开连接
        db->disconnect();
    }

private:
    DatabaseConnection* db;
};
int main() {
    {
        DatabaseConnectionManager dbManager;
        // 这里进行数据库操作
    } // dbManager 在这里出了作用域，自动调用析构函数断开连接

    // 这里数据库已经断开连接，不再可用

    return 0;
}